package com.zzyl.mapper;

import com.github.pagehelper.Page;
import com.zzyl.dto.ReservationDto;
import com.zzyl.entity.Reservation;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.time.LocalDateTime;

@Mapper
public interface ReservationMapper {
// 2.1 查询当天取消预约的数量
Integer getCancelledReservationCountByUserId(@Param("startTime") LocalDateTime startTime,
                                             @Param("endTime") LocalDateTime endTime,
                                             Long updateBy);


// 2.2 查询每个时间段剩余预约次数
   //  @Scheduled(cron = "0 0 * * * *") // 每小时的0分钟执行
   //  @Scheduled(cron = "0 30 * * * *") // 每小时的30分钟执行
Integer getCountByEachTime(LocalDateTime startTime, LocalDateTime endTime);

// 2.3 新增预约
    void addReservation(Reservation reservation);
    // 2.3.1 根据新增预约的手机号码，和预约的时间 校验是否已经预约过
    @Select("select COUNT(*) from reservation where mobile=#{mobile} and time=#{time} and status=0")
    int countByMobile(String mobile, LocalDateTime time);

// 2.4 分页查询预约
    Page<Reservation> findByPage(Integer pageNum, Integer pageSize, Integer status, Long useId);

// 2.5.1 通过id 判断这个预约信息条是否存在
    @Select("select * from reservation where id=#{id}")
    Reservation getReservationBy(Long id);

   
    // 2.5.2 手动通过id 取消预约信息
    void updateReservationByHand(Long id,Integer status);



    //2.7 系统自动更新预约 预约状态过期系统自动修改
    @Update("update reservation set  status=3 where time<#{now} and status=0")
    Integer updateReservation(LocalDateTime now);



}
